/* 
> 动机：
    1. 如果某些数据和某些函数总是一起出现，某些数据经常经常同时变化甚至彼此相依，这就表示你应该将它们分离出去。

> 做法：
    1. 决定如何分解类所负的责任；
    2. 创建一个新类，用来表现从旧类中分离出来的责任；
    3. 构造旧类时创建一个新类的实例，建立“从旧类访问新类”的连接关系；
    4. 对于你想搬移的每一个字段，运用【搬移字段】。每次更改后进行测试；
    5. 使用【搬移函数】将必要函数搬移到新类，先搬移较低层函数（也就是“被其他函数调用”多余“调用其他函数”者）；每次更改后进行测试；
    6. 检查两个类的接口，去掉不再需要的函数，必要时为函数重新去一个适合新环境的名字；
    7. 决定是否公开新的类，如果确实需要，考虑对新类应用【将对象改为值对象】使其成为一个值对象。
*/

class Person {
    get name() {
        return this._name;
    }
    set name(arg) {
        this._name = arg;
    }
    get telephoneNumber() {
        return this._telephoneNumber.tostring;
    }
    get officeAreaCode() {
        return this._telephoneNumber.areaCode;
    }
    set officeAreaCode(arg) {
        this._telephoneNumber.areaCode = arg;
    }
    get officeNumber() {
        return this._telephoneNumber.number;
    }
    set officeNumber(arg) {
        this._telephoneNumber.number = arg;
    }
}
/************************************************ */

class TelephoneNumber {
    constructor() {
        this._telephoneNumber = new TelephoneNumber();
    }
    get areaCode() {
        return this._areaCode;
    }
    set areaCode(arg) {
        this._officeAreaCode = arg;
    }

    get number() {
        return this._number;
    }
    set number(arg) {
        this._officeNumber = arg;
    }
    tostring() {
        return this.areaCode + this.number;
    }

}